<item name="Remove-Tenant" key="remove-tenant" id="{23DFB493-3CC0-494F-8C7E-0D8001A955D3}" tid="{DD22F1B3-BD87-4DB2-9E7D-F7A496888D43}" mid="{00000000-0000-0000-0000-000000000000}" sortorder="300" language="en" version="1" template="powershell script" parentid="{13729980-F568-4F0F-9792-EBC05F97879A}" created="20170404T070850Z"><fields><field tfid="{5DD74568-4D4B-44C1-B513-0AF5F4CDA34F}" key="__created by" type="Single-Line Text"><content>sitecore\Admin</content></field><field tfid="{BADD9CF9-53E0-4D0C-BCC0-2D784C282F6A}" key="__updated by" type="Single-Line Text"><content>sitecore\Admin</content></field><field tfid="{8CDC337E-A112-42FB-BBB4-4143751E123F}" key="__revision" type="Single-Line Text"><content>5cd1766e-d76d-4b73-ad8e-f0dafadf4df1</content></field><field tfid="{25BED78C-4957-4165-998A-CA1B52F67497}" key="__created" type="datetime"><content>20170404T070850Z</content></field><field tfid="{52807595-0F8F-4B20-8D2A-CB71D28C6103}" key="__owner" type="Single-Line Text"><content>sitecore\Admin</content></field><field tfid="{D9CF14B1-FA16-4BA6-9288-E8A174D4D522}" key="__updated" type="datetime"><content>20170514T090150Z</content></field><field tfid="{1C76313E-3C8C-4807-A826-135D10C39299}" key="showrule" type="Rules"><content /></field><field tfid="{B1A94FF0-6897-47C0-9C51-AA6ACB80B1F0}" key="script" type="Multi-Line Text"><content>function Remove-Tenant {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, Position = 0 )]
        [Item]$TenantItem
    )

    begin {
        Write-Verbose "Cmdlet Remove-Tenant - Begin"
        Import-Function Remove-Site
        Import-Function Remove-SiteFolder
    }

    process {
        Write-Verbose "Cmdlet Remove-Tenant - Process"
        Write-Progress -Status "Removing '$($TenantItem.Name)' tenant" -Activity "Getting tenant root item" -Completed
        $siteItemTemplateId = [Sitecore.XA.Foundation.Multisite.Templates+Site]::ID.ToString()
        $siteFolderTemplateId = [Sitecore.XA.Foundation.Multisite.Templates+SiteFolder]::ID.ToString()

        Write-Progress -Status "Removing '$($TenantItem.Name)' tenant" -Activity "Getting all sites" -Completed
        [Sitecore.Data.Items.Item[]]$sites = Get-ChildItem -Path $TenantItem.Paths.Path -Recurse | ? { [Sitecore.Data.Managers.TemplateManager]::GetTemplate($_).InheritsFrom($siteItemTemplateId) }
        $sites | Where-Object { $_ -ne $null } | % { Remove-Site $_ }
        
        Write-Progress -Status "Removing '$($TenantItem.Name)' tenant" -Activity "Getting all site folders" -Completed
        [Sitecore.Data.Items.Item[]]$siteFolders = Get-ChildItem -Path $TenantItem.Paths.Path -Recurse | ? { [Sitecore.Data.Managers.TemplateManager]::GetTemplate($_).InheritsFrom($siteFolderTemplateId) }
        $siteFolders | Where-Object { $_ -ne $null } | % { Remove-SiteFolder $_ }

        $tenantTemplatesRoot = Get-Item master: -ID $TenantItem.Templates
        $tenantMediaLibrary = Get-Item master: -ID $TenantItem.MediaLibrary

        Write-Progress -Status "Removing '$($TenantItem.Name)' tenant" -Activity "Removing tenant item" -Completed
        if ($TenantItem.Children.Count -eq 0) {
            $TenantItem.Recycle() | Out-Null
        }else {
            Write-Error "Could not remove tenant item '$($item.Paths.Path)' as there are other folders/items inside"
        }        

        Write-Progress -Status "Removing '$($TenantItem.Name)' tenant" -Activity "Removing tenant templates" -Completed
        Remove-TenantTemplates $tenantTemplatesRoot

        Write-Progress -Status "Removing '$($TenantItem.Name)' tenant" -Activity "Removing tenant media library" -Completed
        if ($tenantMediaLibrary.Children.Count -eq 0 -or ($tenantMediaLibrary.Children.Count -eq 1 -and $tenantMediaLibrary.Children[0].Name -eq "shared")) {
            $tenantMediaLibrary.Recycle() | Out-Null
        }else {
            Write-Error "Could not remove tenant media library '$($item.Paths.Path)' as there are other folders/items inside"
        }        

        Write-Progress -Status "Removing '$($TenantItem.Name)' tenant" -Activity "Done" -Completed

    }

    end {
        Write-Verbose "Cmdlet Remove-Tenant - End"
    }
}

function Test-NoneItemIsUsingTemplate {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, Position = 0 )]
        [Item]$TemplateItem
    )

    begin {
        Write-Verbose "Cmdlet Test-NoneItemIsUsingTemplate - Begin"
    }

    process {
        Write-Verbose "Cmdlet Test-NoneItemIsUsingTemplate - Process"
        $templateId = $templateItem.ID
        $query = "/sitecore/content//*[@@templateid = '$templateId']"
        $items = Get-Item -Path master: -Language "en" -Query $query
        if ($items) {
            $false
        }
        else {
            $true
        }
    }

    end {
        Write-Verbose "Cmdlet Test-NoneItemIsUsingTemplate - End"
    }
}

function Remove-TenantTemplates {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, Position = 0 )]
        [Item]$TenantTemplatesRoot
    )

    begin {
        Write-Verbose "Cmdlet Remove-TenantTemplates - Begin"
    }

    process {
        Write-Verbose "Cmdlet Remove-TenantTemplates - Process"
        $tenantTemplates = Get-ChildItem -Path $TenantTemplatesRoot.Paths.Path -Recurse | ? { $_.TemplateName -eq 'Template' }
        $canRemoveRoot = $true
        $tenantTemplates | Where-Object {
            $template = $_
            $notUsed = Test-NoneItemIsUsingTemplate $template
            if ($notUsed) {
                $template.Recycle() | Out-Null
            }
            else {
                Write-Host "Could not remove template item as it is being used by at least one item" -ForegroundColor Cyan
                $canRemoveRoot = $false
            }
        }
        if ($canRemoveRoot) {
            $TenantTemplatesRoot.Recycle() | Out-Null
        }
    }

    end {
        Write-Verbose "Cmdlet Remove-TenantTemplates - End"
    }
}</content></field></fields></item>